Paradigmas da Programação I

ESI (5301P3) / MCC (7001N4)

7 de Fevereiro de 2000

Questão 1

As permutações de uma lista são as listas que se obtêm desta trocando os seus elementos de ordem. Por exemplo, as permutações da lista [1,2,3] são
[[1,2,3],[2,1,3],[2,3,1],[1,3,2],[3,1,2],[3,2,1]]
1.
Defina uma função ins :: a -> [a] -> [[a]] que, dado um elemento x e uma lista l dê como resultado a lista das listas resultantes de inserir x em alguma posição de l; por exemplo
ins 1 [2,3,4] = [[1,2,3,4],[2,1,3,4],[2,3,1,4],[2,3,4,1]]
2.
Use a função anterior para definir a função perms :: [a] -> [[a]] que calcula as permutações de uma lista.
3.
A seguinte função testa se uma dada lista está ordenada
ordenada l = and (zipWith (<=) l (tail l))
Ao perguntarmos ao HUGS qual o seu tipo, i.e., ao executarmos o comando :type ordenada, obtemos como resposta
ordenada :: Ord a => [a] -> Bool
Explique por palavras suas o que significa este tipo.
4.
Qual o resultado de calcular a seguinte expressão:
head (filter ordenada (perms [1,3,5,4,2]))

Questão 2

Pretende-se implementar um sistema de gestão de clubes de video. Para cada video pretende-se guardar: Para cada sócio deve-se guardar:
1.
Defina o tipo Clube onde será armazenada toda a informação referida atrás.
2.
Apresente a definição da função insSocio que, dado um clube, o código, nome e a morada de um novo sócio, retorna o clube com este novo sócio.
3.
Apresente a definição da função nCopias que, dado o código de um video, retorna o número de cópias disponíveis (i.e., não alugadas).

Questão 3

Considere a seguinte definição:
type RegTemp = ( Float, Int)
type RegistosTemp = [ RegTemp ]
que representa leituras de temperaturas num reactor nuclear. Cada leitura é constítuida pelo valor da temperatura lido (ex. 109.5) e o instante de tempo da leitura desde a entrada em funcionamento (ex. 355 minutos).
1.
Defina uma função que dada uma lista de leituras, a ordene no tempo.
2.
Defina uma função que dada uma lista de leituras detecte picos de temperatura (quando o elemento anterior tiver valor inferior e o seguinte também).
3.
Defina uma função que dada uma lista de leituras detecte situações de alarme (cinco leituras seguidas com valores crescentes).

Questão 4

Complete a seguinte definição
data Conjunto a = Elems [a]
class Eq a where
  (==) :: a -> a -> Bool
instance Eq a => Eq (Conjunto a) where ...

Questão 5

Seja t definido por t = foldl max 0 [1,5,3,4] Indique o tipo e o valor de t. Explique por palavras suas o significado de t.

Questão 6

Suponha o seguinte tipo que pretende armazenar uma imagem a preto e branco com uma determinada dimensão (apenas são armazenadas as posições onde deve aparecer um píxel a cheio):
type Ponto = (Int,Int)
type Dimensao = Ponto
data Imagem = Imagem Dimensao [Ponto]
Defina Imagem como uma instância da classe Show, de forma que que o resultado de
exemplo = Imagem (3,3) [(1,2),(2,1),(2,2),(2,3),(3,1)]
putStr (show exemplo)
seja
 *
***
 *



José Bernardo Barros
2000-02-07